package com.ruoyi.system.service.impl;

import java.math.BigDecimal;
import java.util.List;

import com.ruoyi.system.domain.ProBase;
import com.ruoyi.system.domain.RepBase;
import com.ruoyi.system.mapper.ProBaseMapper;
import com.ruoyi.system.mapper.RepBaseMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.ProBaseTmpMapper;
import com.ruoyi.system.domain.ProBaseTmp;
import com.ruoyi.system.service.IProBaseTmpService;

/**
 * 产品基本信息临时Service业务层处理
 * 
 * @author ruoyi
 * @date 2021-09-07
 */
@Service
public class ProBaseTmpServiceImpl implements IProBaseTmpService 
{
    @Autowired
    private ProBaseTmpMapper proBaseTmpMapper;

    @Autowired
    private RepBaseMapper repBaseMapper;

    @Autowired
    private ProBaseMapper proBaseMapper;



    /**
     * 查询产品基本信息临时
     * 
     * @param id 产品基本信息临时主键
     * @return 产品基本信息临时
     */
    @Override
    public ProBaseTmp selectProBaseTmpById(Integer id)
    {
        return proBaseTmpMapper.selectProBaseTmpById(id);
    }

    /**
     * 查询产品基本信息临时列表
     * 
     * @param proBaseTmp 产品基本信息临时
     * @return 产品基本信息临时
     */
    @Override
    public List<ProBaseTmp> selectProBaseTmpList(ProBaseTmp proBaseTmp)
    {
        return proBaseTmpMapper.selectProBaseTmpList(proBaseTmp);
    }

    /**
     * 新增产品基本信息临时
     * 
     * @param proBaseTmp 产品基本信息临时
     * @return 结果
     */
    @Override
    public int insertProBaseTmp(ProBaseTmp proBaseTmp)
    {
        return proBaseTmpMapper.insertProBaseTmp(proBaseTmp);
    }

    /**
     * 修改产品基本信息临时
     * 
     * @param proBaseTmp 产品基本信息临时
     * @return 结果
     */
    @Override
    public int updateProBaseTmp(ProBaseTmp proBaseTmp) {
        //首先根据id查处库存的数量
        ProBase proBase = proBaseMapper.selectProBaseById(new Long((long) proBaseTmp.getId()));
        ProBaseTmp proBaseTmp1 = proBaseTmpMapper.selectProBaseTmpById(proBaseTmp.getId());
        if (proBaseTmp.getInventoryAmount() > proBaseTmp1.getInventoryAmount()) {//数量往大了改
            //增加的数量
            Integer addCount = proBaseTmp.getInventoryAmount() - proBaseTmp1.getInventoryAmount();
            if (addCount <= proBase.getInventoryAmount()) {
                if (proBaseTmpMapper.updateProBaseTmp(proBaseTmp) > 0) {
                    //修改成功，减去主表的数量
                    ProBase proBase1 = new ProBase();
                    proBase1.setId(new Long((long) proBaseTmp.getId()));
                    proBase1.setInventoryAmount(new Long((long) addCount));
                    proBaseMapper.upProBaseCount(proBase1);
                    return -3;
                } else {
                    return -2;
                }
            } else if (proBase.getInventoryAmount() == 0) {
                return -1;
            } else {
                return proBase.getInventoryAmount().intValue();
            }
        } else {//往小了改
            Integer addCount = proBaseTmp1.getInventoryAmount() - proBaseTmp.getInventoryAmount();
            if (proBaseTmpMapper.updateProBaseTmp(proBaseTmp) > 0) {
                //修改成功，减去主表的数量
                ProBase proBase1 = new ProBase();
                proBase1.setId(new Long((long) proBaseTmp.getId()));
                proBase1.setInventoryAmount(new Long((long) addCount));
                proBaseMapper.upProBaseCountAdd(proBase1);
                return -3;
            } else {
                return -2;
            }

        }
    }

    /**
     * 批量删除产品基本信息临时
     * 
     * @param ids 需要删除的产品基本信息临时主键
     * @return 结果
     */
    @Override
    public int deleteProBaseTmpByIds(Integer[] ids)
    {
        return proBaseTmpMapper.deleteProBaseTmpByIds(ids);
    }

    /**
     * 删除产品基本信息临时信息
     * 
     * @param id 产品基本信息临时主键
     * @return 结果
     */
    @Override
    public int deleteProBaseTmpById(Integer id)
    {
        return proBaseTmpMapper.deleteProBaseTmpById(id);
    }

    /**
     * 提交报表基本信息
     *
     * @param repBase 报基本信息
     * @return 结果
     */
    public int subRepBase(RepBase repBase){
        int id = repBaseMapper.insertRepBase(repBase);
        repBaseMapper.insertProBase(repBase.getId());
        repBaseMapper.deleteTmp();
        return id;
    }

    /**
     * 计算总价
     *
     * @return 结果
     */
    public RepBase sumPrice() {
        RepBase repBase = new RepBase();
        int price = repBaseMapper.sumPrice();
        repBase.setTotalPrice(new BigDecimal(price));
        return repBase;
    }


}
